package dletc.Linked;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 链表的优点：
 * 		由于链表上的元素在空间存储上内存地址不连续。
 * 		所以随机增删元素的时候不会有大量元素位移，因此随机增删效率较高。
 * 		在以后的开发中，如果遇到随机增删集合元素的业务，建议使用LinkedList
 * 聊表的缺点：
 * 		不能通过数学表达式计算被查找元素的内存地址，每一次查找都是从头节点开始遍历，
 * 		知道找到位置，故LinkedLink集合检索/查找的效率低。
 *
 * LinkedList集合
 * 
 *  1.1 LinkedList集合可以使用List集合的所有方法
 *  	LinkedList是非线程安全的，且没有初始化容量。
 *  
 *  1.2 队列 Queue：（接口）
 *       
 *       也可以存放一组元素，但是存储元素是有规则的：
 *       原则：先进先出
 *       特点：从尾进从头出
 *       
 *       使用： 队列需要使用LinkedList集合作为实现类，去实现接口调用队列里的方法
 *        ← 出口                                         ←入口
 *  *       -----------------------------------------
 *  *       ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
 *  *       ----------------------------------------
 * 

 */
public class Demo01 {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		list.add("abc");
		list.add("abc");
		
		//队列
		Queue<String> queue = new LinkedList<String>();
		
		/**
		 * 入队操作：向对尾添加数据
		 * boolean offer(E e)
		 */
		
		  queue.offer("one");
		  queue.offer("two");
		  queue.offer("three");
		  queue.offer("four");
		  
		  System.out.println(queue);
		  
		  /**
		   *  出队列操作： 从队首取出元素，取出的元素会自动从队列中删除
		   */
		  
		  String poll = queue.poll();
		  System.out.println("被取出的数据为：" + poll);
		  System.out.println(queue);
		  String poll2 = queue.poll();
		  System.out.println("被取出的数据为：" + poll2);
		  
		  /**
		   * 获取队列的长度： 元素的个数
		   * 
		   *   size():
		   */
		  
		  int size = queue.size();
		  System.out.println("长度为：" + size);
		  
		  System.out.println("---------------------------------------");
		  /**
		   * 队列的遍历：
		   * 	队列用增强for循环可以遍历无数字，数据并不会被取出
		   * 	队列用while(queue.size() > 0){
			 	System.out.println(queue.poll());}只能遍历一次，因为数据已经被取
		   */
		  
		  for (String string : queue) {
			System.out.println(string);
		  }
		  
		  System.out.println(queue);
		  
		  while(queue.size() > 0){
			  System.out.println(queue.poll());
		  }
		  
		  System.out.println(queue);

	}

}
